import java.io.File;
import java.util.Arrays;
import java.util.Objects;

/**
 * 编写程序，输入文件夹的绝对路径，输出该文件夹的所有子文件夹。
 * 提示：使用 File 类的 list 或 listFiles 方法
 */
public class Q1 {

    /**
     * 通过 {@code File.list()} 方法获取子文件名
     *
     * @param fn 文件路径
     */
    public static void printSubFilenameByList(String fn) {
        argumentChecker(fn);
        System.out.println(Arrays.toString(new File(fn).list()));
    }

    /**
     * 通过 {@code File.listFiles()} 方法获取子文件名
     *
     * @param fn 文件路径
     */
    public static void printSubFilenameByListFiles(String fn) {
        argumentChecker(fn);
        Arrays.stream(Objects.requireNonNull(new File(fn).listFiles()))
                .map(File::getName).forEach(System.out::println);
    }

    /**
     * 通过 {@code File.list(FilenameFilter)} 方法获取后缀为 .iml 的子文件名
     *
     * @param fn 文件路径
     */
    public static void printSubFilenameByFilter(String fn) {
        argumentChecker(fn);
        System.out.println(Arrays.toString(new File(fn).list((f, n) -> n.endsWith(".iml"))));;
    }

    /**
     * 参数校验器。要求 fn 存在且为文件夹
     *
     * @param fn 文件路径
     */
    private static void argumentChecker(String fn) {
        final File file = new File(fn);
        if (!file.exists() || !file.isDirectory()) {
            throw new IllegalArgumentException("fn: " + fn);
        }
    }

}
